const { Model, DataTypes } = require('sequelize');

// 导出初始化函数
module.exports = (sequelize) => {
    class Address extends Model {}

    // 初始化模型
    Address.init({
        id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        userId: {
            type: DataTypes.INTEGER,
            allowNull: false,
            references: {
                model: 'users',
                key: 'id'
            }
        },
        name: {
            type: DataTypes.STRING(50),
            allowNull: false,
            validate: {
                notEmpty: {
                    msg: '收货人姓名不能为空'
                },
                len: {
                    args: [1, 50],
                    msg: '收货人姓名长度必须在1-50个字符之间'
                }
            }
        },
        phone: {
            type: DataTypes.STRING(20),
            allowNull: false,
            validate: {
                notEmpty: {
                    msg: '手机号不能为空'
                },
                is: {
                    args: [/^1[3-9]\d{9}$/],
                    msg: '请输入正确的手机号码'
                }
            }
        },
        province: {
            type: DataTypes.STRING(50),
            allowNull: false,
            validate: {
                notEmpty: {
                    msg: '省份不能为空'
                },
                len: {
                    args: [1, 50],
                    msg: '省份长度必须在1-50个字符之间'
                }
            }
        },
        city: {
            type: DataTypes.STRING(50),
            allowNull: false,
            validate: {
                notEmpty: {
                    msg: '城市不能为空'
                },
                len: {
                    args: [1, 50],
                    msg: '城市长度必须在1-50个字符之间'
                }
            }
        },
        district: {
            type: DataTypes.STRING(50),
            allowNull: false,
            validate: {
                notEmpty: {
                    msg: '区/县不能为空'
                },
                len: {
                    args: [1, 50],
                    msg: '区/县长度必须在1-50个字符之间'
                }
            }
        },
        detail: {
            type: DataTypes.STRING(200),
            allowNull: false,
            validate: {
                notEmpty: {
                    msg: '详细地址不能为空'
                },
                len: {
                    args: [1, 200],
                    msg: '详细地址长度必须在1-200个字符之间'
                }
            }
        },
        isDefault: {
            type: DataTypes.BOOLEAN,
            defaultValue: false
        }
    }, {
        sequelize,
        modelName: 'Address',
        tableName: 'addresses',
        timestamps: true
    });

    return Address;
};